laksmi.bizonylat = {

	init : function(){
		Event.observe(document, 'keypress', laksmi.bizonylat.shortCuts);
		Event.observe(document, 'submit', laksmi.bizonylat.submitKezelo);

		laksmi.bizonylat.bizonylat.init();

		if($('osszegvaltas'))
			Event.observe($('osszegvaltas'), 'click', laksmi.bizonylat.sendOsszegValtas);

		if(document.location.href.search(/modosit/) != -1)
			laksmi.bizonylat.modosit.init();

		if($('BizonylatIranyB')){
			Event.observe($('BizonylatIranyB'), 'change', laksmi.bizonylat.bizonylat.iranyValasztas);
			Event.observe($('BizonylatIranyK'), 'change', laksmi.bizonylat.bizonylat.iranyValasztas);
		}

		laksmi.ajaxloader = $('ajaxloader');
	},//laksmi.init

	sendOsszegValtas : function(e){
		new Ajax.Request(
			$('BizonylatForm').action + '.json',
			{
				method		:	'post',
				parameters	:	'',
				onComplete	:	function(valasz){
					if(valasz.responseJSON.sikeres){
						$('zegyenleg').innerHTML = valasz.responseJSON.zEgyenleg;
						if(valasz.responseJSON.bizonylatig) {
							$('osszegvaltas').src = laksmi.baseUrl + 'img/bizonylatig.png';
							$('osszegvaltas').title = 'Egyenleg a bizonylatig';
						} else {
							$('osszegvaltas').src = laksmi.baseUrl + 'img/vegig.png';
							$('osszegvaltas').title = 'Záró egyenleg';
						}
					}
				}
			}
			);
		if(e.type == 'submit') Event.stop(e);
		return false;
	},//laksmi.bizonylat.sendOsszegValtas

	shortCuts : function(e){
		//bilentyűzet kezelés
		/*ha selectben vagy inputban vagyunk akkor tiltani kell, hogy ezekben az
		 esetekben ne hívódjanak meg a saját billentyűzet kezelők*/

		pressedKey = e.charCode || e.keyCode || -1;

		switch(pressedKey){
			case Event.KEY_RETURN:	//enter
				switch(e.target.id){
					case 'BizonylatIranyB':
					case 'BizonylatIranyK':
					case 'BizonylatDatum':
					case 'BizonylatMegjegyzes':
						Event.stop(e);
						break;
					case 'TetelGyujto':
						if(e.target.value){
							laksmi.bizonylat.bizonylat.gyujtoHozzaad(e);
							break;
						}
				}
				break;
			case 109:
				if(e.ctrlKey)	//Ctrl + M		submit hívása
					/*var esemeny = {target : laksmi.bizonylat.bizonylat.aForm};
					laksmi.bizonylat.submitKezelo(esemeny);*/
				Event.simulateMouse($('bizonylatMent'), 'click');
				break;
			case 107:	//H
				if(e.ctrlKey){
					/*var esemeny = {};
					esemeny.target = $('BizonylatIranyK');
					laksmi.bizonylat.bizonylat.iranyValasztas(esemeny);*/
					Event.simulateMouse($('BizonylatIranyK'), 'click');
					Event.stop(e);
				}
				break;
			case 98:	//B
				if(e.ctrlKey){
					/*var esemeny = {};
					esemeny.target = $('BizonylatIranyB');
					laksmi.bizonylat.bizonylat.iranyValasztas(esemeny);*/
					Event.simulateMouse($('BizonylatIranyB'), 'click');
					Event.stop(e);
				}
				break;
			case 32:	//space
				if(e.ctrlKey){
					location.href = laksmi.baseUrl + 'bizonylatok';
					Event.stop(e);
				}
				break;
		}
	},//laksmi.shortCuts

	submitKezelo : function(e){
		//minden form submitkezelése
		if(e.target == laksmi.bizonylat.bizonylat.aForm){	//bizonylat rögzítése vagy módosítása
			//kötelező mezők ellenőrzése
			var hiba = '';
			var hibasElemJelzo = [];
			if(!laksmi.bizonylat.bizonylat.datum.value){
				hiba += 'Nincs megadva a bizonylat dátuma!<br>';
				hibasElemJelzo.push(laksmi.bizonylat.bizonylat.datum.previousSibling);
			}
			if(!laksmi.bizonylat.bizonylat.osztalyId.value || laksmi.bizonylat.bizonylat.osztalyId.value == 0){
				hiba += 'Nincs megadva az osztály!<br>';
				hibasElemJelzo.push(laksmi.bizonylat.bizonylat.osztalyId.previousSibling.previousSibling);
			}
			if(hiba){
				laksmi.uzenetmutat(hiba);
				hibasElemJelzo.each(function(formElem){
					new Effect.Highlight(formElem, {
						startcolor : '#ff0000',
						endcolor : '#fff3c2',
						restorecolor : '#fff3c2',
						duration : 5
					});
				});
				Event.stop(e);
				return false;
			}

			//elengedjük a formot
			var i = laksmi.bizonylat.bizonylat.tetel.counter;	//eddig ennyi sor van már a tételek tömbben, a formból származó lesz a következő
			var nev;

			//ha van a formban még adat akkor azt először is megpróbáljuk leküldeni
			$H(laksmi.bizonylat.bizonylat.tetel.inputok).each(function(elem){
				if(elem[1] && elem[1].value){
					Event.simulateMouse($('le'), 'focus');
					throw $break;
				}
			});
			
			//bizonylat inputok hozzáadás és tételek inputok törlése
			laksmi.bizonylat.bizonylat.aForm.getElements().each(function(elem){
				//az irányt csak akkor kell hozzáadni ha a kettő közül a checkedről van szó
				if((elem.name.search(/irany/) == -1 || (elem.name.search(/irany/) != -1 && elem.checked)) && elem.name.search(/Bizonylat/) != -1){
					laksmi.bizonylat.bizonylat.tetelek[elem.name] = elem.value;
				}
				/*if(elem.name.search(/Tetel/) != -1){
					elem.value = null;
				}*/
			});

			//adat küldés
			new Ajax.Request(
				e.target.action + '.json',	//a json kiterjesztést mögé kell teni, hogy a cake a json layoutot generálja le hozzá
				{
					method		:	'post',
					parameters	:	laksmi.bizonylat.bizonylat.tetelek,
					onCreate		: function(){
						laksmi.bizonylat.bizonylat.aForm.hide();
						laksmi.ajaxloader.show();
					},
					onComplete : function(valasz){
						laksmi.bizonylat.bizonylat.aForm.show();
						laksmi.ajaxloader.hide();
						//vizsgáljuk meg a választ, hoyg sikeres volt-e a mentés
						//ha a mentés sikeres
						if(valasz.responseJSON){
							if(valasz.responseJSON.ujSorszam){	//sikeres szerver oldalon, új bizonylat volt
								// a sorszámot meg kell növelni a hidden mezőt és a legendet
								$('BizonylatSorszam').value = $('BizonylatSorszamKeres').value = valasz.responseJSON.ujSorszam;
								$('sorszamLegend').update(valasz.responseJSON.ujSorszam);
								//lapozó módosítás
								if(valasz.responseJSON.ujSorszam > 1) {
									$('prevpage').href = $('prevpage').href.replace(/modosit\/(\d+)/, 'modosit/$1/' + parseInt(valasz.responseJSON.ujSorszam-1));
									$('prevpage').show();
								}
								//az egyenleget módosítani kell
								$('zegyenleg').update(valasz.responseJSON.ujzEgyenleg);

								//takarítsuk ki a tételeket a JS-ből és a DOMból
								laksmi.bizonylat.bizonylat.tetelek = {};

								$A(laksmi.bizonylat.bizonylat.table.lastChild.rows).each(function(tr, index){
									if(index > 1)
										tr.remove();
									});

								//állítsuk a tételszámlálót és a bizonylat összeget 0-ra
								laksmi.bizonylat.bizonylat.tetel.counter = laksmi.bizonylat.bizonylat.bizossz.osszeg = 0;

								laksmi.bizonylat.bizonylat.bizossz.elem.update();
								//osztálykód törlése ha létezik
								var o = $('Osztalytol')
								if(o)
									o.clear();
								//töröljük a bizonylat megjegyzést és tegyük rá a focust
								//a bank esetében nem kell a megjegyzést törölni
								var naplokod = $('naplokod').textContent;
								if(naplokod == 'B'){
									laksmi.bizonylat.bizonylat.osztalykodInput.focus();
									
								}
								else if(naplokod == 'VP'){
									laksmi.bizonylat.bizonylat.megjegyzes.clear();
									laksmi.bizonylat.bizonylat.osztalykodInput.focus();
								}
								else{
									laksmi.bizonylat.bizonylat.megjegyzes.clear();
									laksmi.bizonylat.bizonylat.megjegyzes.focus();	
								}
								//tüntessük el az előző selected tags-t
								$('selectedTags').update();

								//töröljük a választott tagokat
								laksmi.bizonylat.bizonylat.tags = [];

								laksmi.bizonylat.bizonylat.elokeszit();
								laksmi.uzenetmutat(valasz.responseJSON.uzenet);
							}
							else if(valasz.responseJSON.ujzEgyenleg){	//szintén sikeres, nincs ujSorszam, tehát módosítás volt
								$('zegyenleg').update(valasz.responseJSON.ujzEgyenleg);
								//eltüntetjük  a módosító sort laksmi.bizonylat.modosit.elokeszit ellentéte
								new Effect.Fade($('bevitel'));
								laksmi.bizonylat.modosit.tetlsorLatszik = false;
								laksmi.bizonylat.bizonylat.aForm.getElements().each(function(elem){
									elem.disabled = true;
									});
								laksmi.uzenetmutat(valasz.responseJSON.uzenet);
							}
							else{
								//valami JSON válasz jött vissza de nincs ujSorszam
								var h = valasz.responseJSON.uzenet ? valasz.responseJSON.uzenet : 'Valami galibába bonyolódtam mert a JSON válasz nem tartalmazza a sorszámot!';
								laksmi.uzenetmutat(h, 'alert', {}, {duration: 10.0});
								throw new Error(h);
							}
						}
						else{
							//a bizonylat mentése határozottan nem volt sikeres még nem is JSON válasz jött vissza
							var h = 'Lehet, hogy a bizonylatot nem sikerült elmentenem. Nem jött JSON válasz a szervertől.';
							laksmi.uzenetmutat(h, 'alert', {}, {duration: 10.0});
							throw new Error(h);
						}
					}
				}
				);
		}
		else
			return true;
		if(e) Event.stop(e);return false;
	},//laksmi.submitKezelo

	bizonylat : {	//ha változik neve az autocomplete hívásban (view) is módosítani kell

		tetelek	:	{},	//tételsorok az ajax küldéshez előkészítve
		tetel		:	{
			counter	:	0,		//hány tételsor van a bizonylatban
			inputok	 : {},	//mik  aform tételekte vonatkozó input mezői
			modSor	: -1	//hányadik tételsort módosítjuk
			},
		tags : [],	//gyüjtők tömbje: ezt postoljuk a szervernek minden egyes sorra
		tagok :  Builder.node('div'),	//gyűjtők stringje: ezt jelenítjük meg a monitoron

		table : null,	//a DOMban a formot és a bizonylat tételit tartalmazó tábla
		megjegyzes : null,	//bizonylat megjegyzés
		osztalykodInput : null,	//osztálykód inputja
		datum : null,
		osztalyId : null,

		bizossz : {
			osszeg : 0,		 //a bizonylaton lévő tételek összege
			elem : null	//a bizonylat összeget tartalmazo DOM elem
			},

		init : function(){
			Event.observe($('selectedTags'), 'click', laksmi.bizonylat.bizonylat.gyujtoKivesz);
			var leKuld = $('le');
			if(leKuld){
				Event.observe(leKuld, 'focus', laksmi.bizonylat.bizonylat.adSor);
				Event.observe(leKuld, 'click', function(e){Event.stop(e);return false;});
			}
			
			laksmi.bizonylat.bizonylat.datum = $('BizonylatDatum');
			laksmi.bizonylat.bizonylat.osztalyId = $('BizonylatOsztalyId');

			laksmi.bizonylat.bizonylat.aForm = $('BizonylatForm');
			laksmi.bizonylat.bizonylat.tetel.inputok = {
				osszeg	:	$('TetelOsszeg'),
				szoveg	:	$('TetelSzoveg'),
				account	:	$('TetelAccount'),
				accountT	:	$('TetelAccountT'),
				accountK	:	$('TetelAccountK'),
				gyujto	:	$('TetelGyujto')
			}

			laksmi.bizonylat.bizonylat.bizossz.elem = $('bizossz');
			laksmi.bizonylat.bizonylat.bizossz.osszeg = laksmi.setNum(laksmi.bizonylat.bizonylat.bizossz.elem.textContent);
			Event.observe(laksmi.bizonylat.bizonylat.tetel.inputok.osszeg, 'focus', laksmi.bizonylat.bizonylat.osszegFrissit);
			Event.observe(laksmi.bizonylat.bizonylat.tetel.inputok.osszeg, 'blur', laksmi.bizonylat.bizonylat.osszegFrissit);
			Event.observe(laksmi.bizonylat.bizonylat.tetel.inputok.szoveg, 'change', laksmi.bizonylat.bizonylat.saveToBrowserCache);

			new inputmask('date_iso', laksmi.bizonylat.bizonylat.datum);
			new inputmask('amount_eu', laksmi.bizonylat.bizonylat.tetel.inputok.osszeg);
			if($('BizonylatArfolyam'))
				new inputmask('amount_eu', $('BizonylatArfolyam'));

			laksmi.bizonylat.bizonylat.table = $$('#bizonylat table')[0];
			laksmi.bizonylat.bizonylat.megjegyzes = $('BizonylatMegjegyzes');
			laksmi.bizonylat.bizonylat.osztalykodInput = $('Osztalytol') ? $('Osztalytol') : null;

			if($('BizonylatIranyB')){	//ha ven bevétel akkor van kiadás is és nem a vegyes naplóban vagyunk
				var e = {};
				if($('BizonylatIranyB').checked)
					e.target = $('BizonylatIranyB');
				else
					e.target = $('BizonylatIranyK');
				laksmi.bizonylat.bizonylat.iranyValasztas(e);
			}


		},//laksmi.bizonylat.bizonylat.init

		gyujtoHozzaad : function(e){
			laksmi.bizonylat.bizonylat.gyujtoHozzaadIdErtek(laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId, e.target.value);
			e.target.value = laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId = null;
			if(e) Event.stop(e);return false;
		},//laksmi.bizonylat.bizonylat.gyujtoHozzaad

		gyujtoHozzaadIdErtek : function(ujId, ujErtek){
			var celSpan = $('selectedTags');
			var ujGyujto = Builder.node(
				'div',
					{className : 'gyujtok'},
					[
						Builder.node('img', {
							src : laksmi.baseUrl + 'img/x.png',
							className : 'ximg',
							id : 'deltag' + ujId
							}),
						Builder.node('span', ujErtek)
					 ]
				);
			laksmi.bizonylat.bizonylat.tags.push(ujId);
			laksmi.bizonylat.bizonylat.tagok.insert(Builder.node(
																'span',
																{
																className : 'gyujtok',
																id : 'delspantag' + ujId
																},
																ujErtek
															));
			celSpan.insert(ujGyujto);
		},

		gyujtoKivesz : function(e){
			//az aktív sorban már kiválasztott gyüjtőket törli
			if(e.target.nodeName == 'IMG'){
				e.target.parentNode.remove();

				//ki kell venni a tags és tagok tömbökből is
				laksmi.bizonylat.bizonylat.tags = laksmi.bizonylat.bizonylat.tags.without(e.target.id.replace(/deltag/, ''));
				laksmi.bizonylat.bizonylat.tagok.childElements().each(function(elem){
					if(elem.id == e.target.id.replace(/deltag/, 'delspantag'))
						elem.remove();		//a $ hívással nem távolítható el mert ezen a ponton nincs még benne a DOMban
					});
			}
			if(e) Event.stop(e);return false;
		},//laksmi.bizonylat.bizonylat.gyujtoKivesz

		adSor : function(e){
			//tételsor hozzáadása a bizonylathoz és a laksmi.bizonylat.bizonylat.tetelek tömbhöz
			if(e.target.id == 'le'){	//ha a clicket a leküld gomb váltja ki

				//ellenőrizzük, hogy kitöltött-e minden kötelező mezőt
				var hiba = '';
				var hibasElemJelzo = [];
				var isVegyes = laksmi.bizonylat.bizonylat.tetel.inputok.account ? false : true;
				if(!isVegyes){
					var accountKitoltve = laksmi.bizonylat.bizonylat.tetel.inputok.account.taroltId;
				}
				else{
					var accountTKitoltve = laksmi.bizonylat.bizonylat.tetel.inputok.accountT.taroltId;
					var accountKKitoltve = laksmi.bizonylat.bizonylat.tetel.inputok.accountK.taroltId;
				}
				if(!isVegyes && !accountKitoltve){
					hiba += 'Nincs kiválasztva számla!<br>';
					hibasElemJelzo.push(laksmi.bizonylat.bizonylat.tetel.inputok.account.parentNode.parentNode);
				}
				if(isVegyes){
					if(!accountTKitoltve){
						hiba += 'Nincs kiválasztva tartozik számla!<br>';
						hibasElemJelzo.push(laksmi.bizonylat.bizonylat.tetel.inputok.accountT.parentNode.parentNode);
					}
					if(!accountKKitoltve){
						hiba += 'Nincs kiválasztva követel számla!<br>';
						hibasElemJelzo.push(laksmi.bizonylat.bizonylat.tetel.inputok.accountK.parentNode.parentNode);
					}
				}
				if(!laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.value){
					hiba += 'Nincs megadva összeg!<br>';
					hibasElemJelzo.push(laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.parentNode.parentNode);
				}
				if(!laksmi.bizonylat.bizonylat.tetel.inputok.szoveg.value){
					hiba += 'Nincs megadva tétel megjegyzés!<br>';
					hibasElemJelzo.push(laksmi.bizonylat.bizonylat.tetel.inputok.szoveg.parentNode.parentNode);
				}
				if(hiba){
					laksmi.uzenetmutat(hiba);
					hibasElemJelzo.each(function(formElem){
						new Effect.Highlight(formElem, {
							startcolor : '#ff0000',
							endcolor : '#fff3c2',
							restorecolor : '#fff3c2',
							duration : 5
						});
					});
					Event.stop(e);
					return false;
				}

				//ha van érték a gyüjtőknél akkor azt nem küldte még le, be kell pakolni a tömbökbe
				if(laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId){
					laksmi.bizonylat.bizonylat.tags.push(laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId);
					laksmi.bizonylat.bizonylat.tagok.insert(Builder.node(
																'span',
																{className : 'gyujtok', id : 'delspantag' + laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId},
																laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.value
															));
					//a taroltId-re nincs szükség a továbbiakban
					laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId = null;
				}

				//új sor létrehozása
				var i = (laksmi.bizonylat.bizonylat.tetel.modSor != -1) ? laksmi.bizonylat.bizonylat.tetel.modSor : laksmi.bizonylat.bizonylat.tetel.counter;
				laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][osszeg]'] = laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.value.replace(/ /,'');	//kivesszük a szóközöket
				laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][szoveg]'] = laksmi.bizonylat.bizonylat.tetel.inputok.szoveg.value;
				if(laksmi.bizonylat.bizonylat.tetel.inputok.account){
					laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountNev]'] = laksmi.bizonylat.bizonylat.tetel.inputok.account.value;
					laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][account]'] = laksmi.bizonylat.bizonylat.tetel.inputok.account.taroltId;	//taroltIid nem value mert az inputban szöveg van nem id
				}
				else{
					laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountTNev]'] = laksmi.bizonylat.bizonylat.tetel.inputok.accountT.value;
					laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountT]'] = laksmi.bizonylat.bizonylat.tetel.inputok.accountT.taroltId;
					laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountKNev]'] = laksmi.bizonylat.bizonylat.tetel.inputok.accountK.value;
					laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountK]'] = laksmi.bizonylat.bizonylat.tetel.inputok.accountK.taroltId;
				}
				laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][gyujto][]'] = laksmi.bizonylat.bizonylat.tags;

				//új táblázatsor létrehozása a DOM-ba illesztéshez
				var felkuldElement = Builder.node('img',
													  {
														src : laksmi.baseUrl + 'img/felkuld.png',
														title : 'Felküld',
														className : 'felkuld',
														id : 'mod_' + i
														}
													);
				var torolElement = Builder.node('img',
													  {
														src : laksmi.baseUrl + 'img/torol.png',
														title : 'Tételsor törlése',
														className : 'torol',
														id : 'del_' + i,
														width : 25,
														height : 25
														}
													);
				if(laksmi.bizonylat.bizonylat.tetel.inputok.account)
					var ujSor = Builder.node('tr',
						{
							id : 'sor_' + i,
							className : ''
						},
						[
							Builder.node('td', {className : 'jobb'}, laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.value),
							Builder.node('td', laksmi.bizonylat.bizonylat.tetel.inputok.szoveg.value),
							Builder.node('td', laksmi.bizonylat.bizonylat.tetel.inputok.account.value),
							Builder.node('td', {className : 'pici'}, laksmi.bizonylat.bizonylat.tagok),
							Builder.node('td', {className : 'felkuld kozep'}, [felkuldElement, torolElement])
						]);
				else	//vegyes egy oszloppal több van
					var ujSor = Builder.node('tr',
						{
							id : 'sor_' + i,
							className : ''
						},
						[
							Builder.node('td', {className : 'jobb'}, laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.value),
							Builder.node('td', laksmi.bizonylat.bizonylat.tetel.inputok.szoveg.value),
							Builder.node('td', laksmi.bizonylat.bizonylat.tetel.inputok.accountT.value),
							Builder.node('td', laksmi.bizonylat.bizonylat.tetel.inputok.accountK.value),
							Builder.node('td', {className : 'pici'}, laksmi.bizonylat.bizonylat.tagok),
							Builder.node('td', {className : 'felkuld kozep'}, [felkuldElement, torolElement])
						]);

				Event.observe(felkuldElement, 'click', laksmi.bizonylat.modosit.sorFelkuld);
				Event.observe(torolElement, 'click', laksmi.bizonylat.modosit.torol);

				laksmi.bizonylat.bizonylat.tagok = Builder.node('div');
				laksmi.bizonylat.bizonylat.tags = [];

				//látható inputok értékének törlése
				laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.value = laksmi.bizonylat.bizonylat.tetel.inputok.szoveg.value = laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.value = null;
				if(laksmi.bizonylat.bizonylat.tetel.inputok.account){
					laksmi.bizonylat.bizonylat.tetel.inputok.account.value = laksmi.bizonylat.bizonylat.tetel.inputok.account.taroltId = null;
				}
				else
					laksmi.bizonylat.bizonylat.tetel.inputok.accountT.value = laksmi.bizonylat.bizonylat.tetel.inputok.accountK.value = null;
				$('selectedTags').update();

				if(laksmi.bizonylat.bizonylat.tetel.modSor != -1){
					//módosításról van szó
					laksmi.bizonylat.bizonylat.tetel.modSor = -1;
					laksmi.bizonylat.bizonylat.table.tBodies[0].rows[parseInt(i)+2].replace(ujSor);	//i+2 a sor indexe mivel 1 sor a fejléc, 1 sor a form
					laksmi.bizonylat.bizonylat.table.tBodies[0].rows[parseInt(i)+2].removeClassName('inactive');
				}
				else{
					//új tételsor hozzáadásáról van szó
					laksmi.bizonylat.bizonylat.tetel.counter++;
					laksmi.bizonylat.bizonylat.table.tBodies[0].insert(ujSor);
				}
				//focus az összegre
				laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.focus();
			}
			if(e) Event.stop(e);return false;
		},//laksmi.bizonylat.bizonylat.gyujtoKivesz

		setSzamlaId : function(input, selectedLi){
			//a számlaszám ajaxos keresésénél az inputba a számla neve kerül, az id a selectedLi-ben lesz
			//a cake autocomplete hívja afterUpdate eseményre, nincs rá hivatkozás ebben a fájlban
			//input.id ilyesmi lesz: TetelAccountK
			var azInput = input.id.replace(/TetelA/, 'a');
			laksmi.bizonylat.bizonylat.tetel.inputok[azInput].taroltId = laksmi.elotagEltavolit(selectedLi.id);
		},//laksmi.bizonylat.bizonylat.setSzamlaId

		setOsztalyId : function(input, selectedLi){
			//az osztaly id ajaxos keresésénél az inputba a osztály neve kerül, az id a selectedLi-ben lesz
			//a cake autocomplete hívja afterUpdate eseményre, nincs rá hivatkozás ebben a fájlban
			laksmi.bizonylat.bizonylat.osztalyId.value = laksmi.elotagEltavolit(selectedLi.id);
		},//laksmi.bizonylat.bizonylat.setOsztalyId

		setGyujtoId : function(input, selectedLi){
			//a gyüjtő ajaxos keresésénél az inputba a számla neve kerül, az id a selectedLi-ben lesz
			//a cake autocomplete hívja afterUpdate eseményre, nincs rá hivatkozás ebben a fájlban
			laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId = laksmi.elotagEltavolit(selectedLi.id);
		},//laksmi.bizonylat.bizonylat.setGyujtoId

		osszegFrissit : function(e, recalculate){
			//a bizonylat összegének átszámítása null, focus és blur-re
			if(recalculate){
				//teljes újraszámolás szükséges
				laksmi.bizonylat.bizonylat.bizossz.osszeg = 0;
				$H(laksmi.bizonylat.bizonylat.tetelek).each(function(elem){
					if(elem.key.search(/osszeg/) != -1)
						if(laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+elem.key.match(/\d/)[0]+'][spec]'] != 'd'){
							//a keyből kivesszük a sorszámot és megnézzük, hogy ezen a sorszámon nincs-e d a spec tulajdonságon
							laksmi.bizonylat.bizonylat.bizossz.osszeg += parseFloat(elem.value);
						}
					});
			}
			else{
				var tetelOsszeg = e.target.value ? laksmi.setNum(e.target.value) : 0;
				if(e.type == 'focus' && tetelOsszeg){
					//most került az inputra a focus, ha van értéke akkor le kell vonni a bizossz-ből
					tetelOsszeg = -1*tetelOsszeg;
				}
				laksmi.bizonylat.bizonylat.bizossz.osszeg += tetelOsszeg;
			}
			laksmi.bizonylat.bizonylat.bizossz.elem.update(number_format(laksmi.bizonylat.bizonylat.bizossz.osszeg, 2, ',', ' '));
		},//laksmi.bizonylat.bizonylat.osszegFrissit

		iranyValasztas : function(e){
			//Bevételt vagy kiadást választott
			var be = $('BizonylatIranyB');
			var ki = $('BizonylatIranyK');
			if(e.target == be){
				be.previous().className = 'iranyActive';
				ki.previous().removeClassName('iranyActive');
				$('alapcim').className = 'be';
				$('tetelsor').className = 'be';
				laksmi.bizonylat.bizonylat.bizossz.elem.addClassName('obe');
				laksmi.bizonylat.bizonylat.bizossz.elem.removeClassName('oki');
			}
			else{
				be.previous().removeClassName('iranyActive');
				ki.previous().className = 'iranyActive';
				$('alapcim').className = 'ki';
				$('tetelsor').className = 'ki';
				laksmi.bizonylat.bizonylat.bizossz.elem.addClassName('oki');
				laksmi.bizonylat.bizonylat.bizossz.elem.removeClassName('obe');
			}
		},//iranyValasztas
		
		saveToBrowserCache : function(){
			//Firefox 12-től a browser csak akkor menti el a saját form cache-be a beírt értéket ha ütünk entert is, csak TAB-nál nem
			Event.simulateKey(laksmi.bizonylat.bizonylat.tetel.inputok.szoveg, 'keypress', {keyCode : 13});
			
		},

		elokeszit : function(){
			//előkészíti a bizonylatot ajax lekérés után új és módosítás is
			//a naplóinfo leged aktualizálása
			$('naploinfo').update($('alapcim').textContent);
		}//laksmi.bizonylat.bizonylat.elokeszit
	},//laksmi.bizonylat.bizonylat

	modosit : {

		tetlsorLatszik : false,

		init : function(){
			$$('.felkuld').each(function(elem){
				Event.observe(elem, 'click', laksmi.bizonylat.modosit.sorFelkuld);
				});//felkuld linkek
			$$('.torol').each(function(elem){
				Event.observe(elem, 'click', laksmi.bizonylat.modosit.torol);
				});//torol linkek
		},//laksmi.bizonylat.modosit.init

		elokeszit : function(e){
			//a form szerkeszthetővé tétele és a beviteli sor megjelenítése
			new Effect.Appear($('bevitel'));
			laksmi.bizonylat.modosit.tetlsorLatszik = true;
			laksmi.bizonylat.bizonylat.aForm.getElements().each(function(elem){
				if(elem.disabled)
					elem.disabled = false;
				});
			if(e) Event.stop(e);
			return false;
		},//laksmi.bizonylat.modosit.elokeszit

		sorFelkuld : function(e){
			//kiválasztott sor felküldése a tételsorba
			if(!laksmi.bizonylat.modosit.tetlsorLatszik){
				laksmi.bizonylat.modosit.elokeszit();
				laksmi.bizonylat.modosit.tetlsorLatszik = true;
			}
			//kérjük le a tételsor id-jét
			var tetelsorId = laksmi.elotagEltavolit(e.target.id);

			//töltsük fel a tételsort a megfelelő adatokkal
			if(tetelsorId != ''){	//vigyázat NaN != NaN
				laksmi.bizonylat.bizonylat.tetel.modSor = tetelsorId;	//ezt a sorszámú sort módosítjuk éppen
				//az osszeget át kell alakítani a tizedespont tizedesvessző téma miatt
				var osszeg = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][osszeg]'] ? (laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][osszeg]']).replace(/\./, ',') : null;
				laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.value = osszeg;
				laksmi.bizonylat.bizonylat.tetel.inputok.szoveg.value = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][szoveg]'] ? laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][szoveg]'] : null;
				if(laksmi.bizonylat.bizonylat.tetel.inputok.account){
					laksmi.bizonylat.bizonylat.tetel.inputok.account.value = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountNev]'] ? laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountNev]'] : null;
					laksmi.bizonylat.bizonylat.tetel.inputok.account.taroltId = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][account]'] ? laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][account]'] : null;
				}
				else{
					laksmi.bizonylat.bizonylat.tetel.inputok.accountT.value = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountTNev]'] ? laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountTNev]'] : null;
					laksmi.bizonylat.bizonylat.tetel.inputok.accountT.taroltId = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountT]'] ? laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountT]'] : null;
					laksmi.bizonylat.bizonylat.tetel.inputok.accountK.value = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountKNev]'] ? laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountKNev]'] : null;
					laksmi.bizonylat.bizonylat.tetel.inputok.accountK.taroltId = laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountK]'] ? laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][accountK]'] : null;
				}

				laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.value = null;
				laksmi.bizonylat.bizonylat.tetel.inputok.gyujto.taroltId = null;
				laksmi.bizonylat.bizonylat.tags = [];
				laksmi.bizonylat.bizonylat.tagok = Builder.node('div');
				$('selectedTags').innerHTML = '';

				if(laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][gyujto][]']){
					for(i=0; i<laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][gyujto][]'].length; i++) {
						laksmi.bizonylat.bizonylat.gyujtoHozzaadIdErtek(laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][gyujto][]'][i],
							$('delspantag'+laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][gyujto][]'][i]).textContent);
					}
				}
				
				//rejtsük el a tételsort
				e.target.parentNode.parentNode.addClassName('inactive');
			}
			else
				laksmi.bizonylat.bizonylat.tetel.modSor = -1	//nem módosítunk tételt, hanem új tételsort adunk hozzá
			//todo: focus az összegre
			//laksmi.bizonylat.bizonylat.tetel.inputok.osszeg.focus();
		},//laksmi.bizonylat.modosit.sorFelkuld

		torol : function(e){
			//tételsor vagy teljes bizonylat törlése, illetve törlésből való visszaállítása
			if(e.target.id){
				//egy bizonyos tétel sort törlünk
				var tetelsorId = laksmi.elotagEltavolit(e.target.id);
				var tetelSor = $('sor_' + tetelsorId);

				//ha a tetel meg nincs az adatbazisban
				if(!laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + tetelsorId + '][id]']) {

					//tablabol torlunk
					laksmi.bizonylat.bizonylat.table.tBodies[0].rows[parseInt(tetelsorId)+2].remove();

					for (i=parseInt(tetelsorId)+1; i<laksmi.bizonylat.bizonylat.tetel.counter; i++){
						//a torolt sor utan kovetkezo sorok sor_ mod_ es del_ azonositoit eggyel csokkentjuk
						$('sor_' + i).id = 'sor_' + (i-1);
						$('mod_' + i).id = 'mod_' + (i-1);
						$('del_' + i).id = 'del_' + (i-1);

						//a torolt sor id-janal nagyobb id-ju sorok id-jet eggyel csokkentjuk a tetelek tomb indexeben is
						laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][osszeg]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][osszeg]'];
						laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][szoveg]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][szoveg]'];
						laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][gyujto][]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][gyujto][]'];
						laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][spec]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][spec]'];
						laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][id]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][id]'];

						if(laksmi.bizonylat.bizonylat.tetel.inputok.account){
							laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][accountNev]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountNev]'];
							laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][account]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][account]'];
						}
						else{
							laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][accountTNev]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountTNev]'];
							laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][accountT]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountTNev]'];
							laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][accountKNev]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountKNev]'];
							laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (i-1) + '][accountK]'] = laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + i + '][accountK]'];
						}
					}

					//a tetelek tombbol az utolso elemet toroljuk
					delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][osszeg]'];
					delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][szoveg]'];
					delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][gyujto][]'];
					delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][spec]'];
					delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][id]'];

					if(laksmi.bizonylat.bizonylat.tetel.inputok.account){
						delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][accountNev]'];
						delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][account]'];
					}
					else{
						delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][accountTNev]'];
						delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][accountT]'];
						delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][accountKNev]'];
						delete laksmi.bizonylat.bizonylat.tetelek['data[Tetel][' + (laksmi.bizonylat.bizonylat.tetel.counter-1) + '][accountK]'];
					}

					//tetelszamlalot csokkentjuk
					laksmi.bizonylat.bizonylat.tetel.counter--;
				}
				else{
					if(tetelSor.className.search(/spec_d/) != -1){
						tetelSor.removeClassName('spec_d');
						laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][spec]'] = 0;
					}
					else{	//töröltként jelöljük
						tetelSor.addClassName('spec_d');
						laksmi.bizonylat.bizonylat.tetelek['data[Tetel]['+tetelsorId+'][spec]'] = 'd';
					}
				}
				laksmi.bizonylat.bizonylat.aForm.getElements().each(function(elem){
						elem.disabled = false;
					});
				laksmi.bizonylat.bizonylat.osszegFrissit(null, true);
			}
		}//laksmi.bizonylat.modosit.torol

	}//laksmi.bizonylat.modosit
}//laksmi

document.observe('dom:loaded', function(){
	laksmi.bizonylat.init();
	});

function number_format( number, decimals, dec_point, thousands_sep ) {
	var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
	var d = dec_point == undefined ? "," : dec_point;
	var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
	var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}